<?php

/**
 * Created by PhpStorm.
 * 成都千峰云科技有限公司短信平台SDK
 * User: lihui <yezhimeih7@foxmail.com>
 * Date: 2017/2/10
 * Time: 16:54
 */
namespace Common\Lib\TciocSMS;

class TciocSMS
{

    public static $SMS_ACTION_SEND="send";  // 发送短信给指定的号码
    public static $SMS_ACTION_OVERAGE="overage";  // 余额及已发送量查询接口
    public static $SMS_ACTION_CHECKKEYWORD="checkkeyword"; //非法关键词查询
    // 测试账号 ： lih23 ,密码 ：lih2017
//    protected $host="http://121.42.160.216:6088/";
//    protected $api_url_send="v2sms.aspx";
//    protected $api_url=array(
//        'send'=>'v2sms.aspx',
//        'send_gbk'=>'v2smsGBK.aspx',
//    );
    private $config=array(
        'userid'=>0,    // 企业id
        'timestamp'=>"",  // 时间戳   系统当前时间字符串，年月日时分秒，例如：20120701231212
        'sign'=>"",     // 签名   使用 账号+密码+时间戳 生成MD5字符串作为签名。MD5生成32位，且需要小写
        'action'=>"",   // 发送任务命令   ,其值包含   send/overage/checkkeyword
        'mobile'=>"", // 全部被叫号码 发信发送的目的号码.多个号码之间用半角逗号隔开
        'content'=>"",  // 发送内容  短信的内容，内容需要UTF-8编码
        'sendTime'=>"",  //定时发送时间   为空表示立即发送，定时发送格式2010-10-24 09:08:10
        'extno'=>"",   // 扩展子号   请先询问配置的通道是否支持扩展子号，如果不支持，请填空。子号只能为数字，且最多10位数。
    );
    protected $host,$api_url_send,$account,$pwd,$sign_str;

    public function __construct($config=array())
    {
        $this->config=array_merge($this->config,$config);
//        $option=array(
//            'host'=>'http://121.42.160.216:6088/',
//            'account'=>'',
//            'send'=>'v2sms.aspx',
//            'pwd'=>'',
//            'userid'=>53,
//            'status'=>1,
//        );
        $option=sp_get_option('sms_settings');
        if(empty($option)){
            $msg="未配置短信平台信息！";
            tc_access_log($msg,"admin");
            E($msg);
        }
        if(!$option["status"]){
            $msg="未开启短信平台设置！";
            tc_access_log($msg,"admin");
            E($msg);
        }
        $sms_conf=$option;
        $flag=true;
        empty($sms_conf['host']) && $flag=false;
        empty($sms_conf['account']) && $flag=false;
        empty($sms_conf['send']) && $flag=false;
        empty($sms_conf['pwd']) && $flag=false;
        empty($sms_conf['userid']) && $flag=false;
        empty($sms_conf['signstr']) && $flag=false;
        if($flag===false){
            $msg="短信平台信息不完善！";
            tc_access_log($msg,"admin");
            E($msg);
        }
        $this->host=$sms_conf['host'];
        $this->account=$sms_conf['account'];
        $this->pwd=tc_pwd_decode($sms_conf['pwd']);
        $this->api_url_send=$sms_conf['send'];
        $this->sign_str=$sms_conf['signstr'];
        $this->config['userid']=$sms_conf['userid'];
    }


    /**
     * 发送短信的SDK
     * @param string $mobile 电话号码 ,支持多个，需以 半角逗号分开 ","
     * @param string $content 短信发送内容,无须包含签名内容
     * @param string $signStr 短信签名 默认为系统后台指定
     * @param string $action 短信发送方式 支持 send/overage/checkkeyword, 默认为发送给用户
     * @param string $sendTime 指定时间发送，默认为及时发送
     * @return bool|mixed
     */
    public function sendSMS($mobile="",$content="",$signStr="",$action="send",$sendTime=""){
        //$content= iconv("GBK","UTF-8",$content);
        //$content= iconv("GB2312","UTF-8",$content);
        $timestamp=date("YmdHis");
        empty($signStr) && $signStr=$this->sign_str;
        $sign_str=$this->account.$this->pwd.$timestamp;
        $sign=md5($sign_str);
        $url=$this->host.$this->api_url_send;
        $data=array(
//            'userid'=>78,
//            'userid'=>53,
            'timestamp'=>$timestamp,
            'sign'=>$sign,
            'action'=>$action,

//            'content'=>$content,
             //签名+内容+退订回复T
//            'content'=>"【成都千峰云】您好！我公司新年大促销：企业官网制作＋微网站＋营销短信300条，只需1980元起，咨询电话18200356244退订回复T",
//            'sendTime'=>"",
//            'extno'=>"",
        );
        $data=array_merge($this->config,$data);

        switch($action){
            case "send":
                if(empty($mobile)){
                    tc_access_log("短信发送接口：电话号码不能为空！","sms");
                    return false;
                }
                if(empty($content)){
                    tc_access_log("短信发送接口：发送内容不能为空！","sms");
                    return false;
                }
                $data['mobile']=$mobile;
                $data['content']="【".$signStr."】".$content."退订回复T";
                $data['sendTime']=$sendTime;
                $data['extno']="";
            break;
            case "overage":

            break;
            case "checkkeyword":
                if(empty($content)){
                    tc_access_log("短信发送接口：检测内容不能为空！","sms");
                    return false;
                }
                $data['content']="【".$signStr."】".$content."退订回复T";
            break;
            default:
                return false;
            break;
        }

        $other_data=(array(
            'send'=>$data,
        ));
        $curl=new \Curl();
        if($curl->create()===false){
            tc_access_log("短信发送接口：系统CURL初始化失败！","sms",json_encode($other_data));
            return false;
        }
        $res=$curl->post($url,$data);
        if($res===false){
            tc_access_log("短信发送接口：curl发送数据失败！","sms",json_encode($other_data));
            return false;
        }

        //禁止解析外部的xml
        libxml_disable_entity_loader(true);
        //将XML字符串转化为数组
        $values = json_decode(json_encode(simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        $other_data['receive']=$values;
        $other_data=json_encode($other_data);

        if(empty($values)){
            tc_access_log("发送短信失败：未接收到返回数据！","sms",$other_data);
            return false;
        }
        if($values['returnstatus']=="Success"){
            tc_access_log("短信发送成功！","sms",$other_data);
            return $values;
        }else{
            tc_access_log("发送短信失败：".$values['message'],"sms",$other_data);
            return false;
        }
    }

}